home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 23 / CU Amiga - Super CD-ROM 23 (June 1998).iso / CUCD / Programming / OUI / rcs / imgbut.cc < prev    next >
Encoding:
C/C++ Source or Header  |  1998-04-08  |  7.1 KB  |  317 lines

  1. head    1.4;
  2. access;
  3. symbols;
  4. locks
  5.     dlorre:1.4; strict;
  6. comment    @// @;
  7.  
  8.  
  9. 1.4
  10. date    98.04.08.15.10.37;    author dlorre;    state Exp;
  11. branches;
  12. next    1.3;
  13.  
  14. 1.3
  15. date    97.07.14.04.20.21;    author dlorre;    state Exp;
  16. branches;
  17. next    1.2;
  18.  
  19. 1.2
  20. date    96.08.28.20.03.48;    author dlorre;    state Exp;
  21. branches;
  22. next    1.1;
  23.  
  24. 1.1
  25. date    96.08.22.02.05.10;    author dlorre;    state Exp;
  26. branches;
  27. next    ;
  28.  
  29.  
  30. desc
  31. @Oui.lib -- Object User Interface
  32. Projet créé en 1994
  33. Auteur: Dominique Lorre
  34. @
  35.  
  36.  
  37. 1.4
  38. log
  39. @set function added
  40. @
  41. text
  42. @// $Id: imgbut.cc 1.3 1997/07/14 04:20:21 dlorre Exp $
  43. #include <intuition/classes.h>
  44. #include <graphics/gfxmacros.h>
  45. #include <intuition/classes.h>
  46. #include <intuition/classusr.h>
  47. #include <intuition/gadgetclass.h>
  48. #include <intuition/imageclass.h>
  49. #include <intuition/cghooks.h>
  50. #include <intuition/icclass.h>
  51. #include <utility/tagitem.h>
  52. #include <utility/hooks.h>
  53. #include <libraries/gadtools.h>
  54.  
  55. #include "screen.h"
  56. #include "window.h"
  57. #include "gadgets/imgbut.h"
  58. #include "gadgets/eclass.h"
  59. #include "gadgetlist.h"
  60. #include "renderim.h"
  61.  
  62. #include <proto/intuition.h>
  63. #include <proto/utility.h>
  64. #include <clib/alib_protos.h>
  65. #include <mydebug.h>
  66. #include <compiler.h>
  67.  
  68. // imgbut est désormais héritée de FButton
  69.  
  70. IMPORT int InitFButton(void) ;
  71. IMPORT void FreeFButton(void) ;
  72. IMPORT Class *BOOPSIfbutton ;
  73.  
  74. static int InitRenderIm(void) ;
  75. static void FreeRenderIm(void) ;
  76. Class *renderim ;
  77.  
  78. extern "C" ULONG STDARGS HookEntry() ;
  79.  
  80. // ========================================================================
  81. // ============================  IMGBUT CLASS =============================
  82. // ========================================================================
  83.  
  84.  
  85. imgbut::imgbut(gadgetlist *gl,
  86.                void (window::*func)(gadget *, unsigned long, unsigned short),
  87.                Image *image,
  88.                Image *box) : gadget(gl, func)
  89. {
  90.     InitFButton() ;
  91.  
  92.     gad = gl->gad = (Gadget *)NewObject(BOOPSIfbutton, NULL,
  93.             GA_ID,          gl->ng->ng_GadgetID,
  94.             GA_Left,        gl->ng->ng_LeftEdge,
  95.             GA_Top,         gl->ng->ng_TopEdge,
  96.             GA_Width,       gl->ng->ng_Width,
  97.             GA_Height,      gl->ng->ng_Height,
  98.             GA_RelVerify,   TRUE,
  99.             GA_Previous,    gl->gad,
  100.             GA_Image,       box,
  101.             GA_LabelImage,  image,
  102.             EGA_XPens,      gl->win->ws->xpens,
  103.             TAG_END) ;
  104.  
  105. }
  106.  
  107. imgbut::~imgbut()
  108. {
  109.     DisposeObject(gad) ;
  110.     FreeFButton() ;
  111. }
  112.  
  113. void imgbut::select(BOOL sel)
  114. {
  115.     SetGadgetAttrs(gad, w, NULL,
  116.         GA_Selected,    sel,
  117.         TAG_END) ;
  118.     RefreshGList(gad, w, NULL, 1);
  119. }
  120.  
  121.  
  122. void imgbut::set(Image* image)
  123. {
  124.     SetGadgetAttrs(gad, w, NULL,
  125.         GA_LabelImage,    image,
  126.         TAG_END) ;
  127. }
  128.  
  129. // ========================================================================
  130. // ========================== RENDER IMAGE ================================
  131. // ========================================================================
  132.  
  133. struct RenderImageData {
  134.     Image *ri_TStyle[9] ;
  135.     Image ri_DefaultImage ;
  136. };
  137.  
  138. static ULONG STDARGS DispatchRenderImage(Class *cl, Object *o, Msg msg);
  139.  
  140. static int ImCnt = 0 ;
  141.  
  142. extern "C" {
  143. int _STI_4000_InitRenderIm(void)
  144. {
  145. int retval = 0 ;
  146.  
  147.     if (!(renderim = MakeClass(NULL, (UBYTE *)"imageclass", NULL,
  148.         sizeof(RenderImageData), 0))) {
  149.         retval = 1 ;
  150.     }
  151.     else {
  152.         renderim->cl_Dispatcher.h_Entry = (HOOKFUNC)HookEntry ;
  153.         renderim->cl_Dispatcher.h_SubEntry = (HOOKFUNC)DispatchRenderImage;
  154.         renderim->cl_Dispatcher.h_Data = NULL ;
  155.     }
  156. #if defined( __GNUG__ )
  157.     if (retval) exit(20) ;
  158. #else
  159.     return retval ;
  160. #endif
  161. }
  162.  
  163. void _STD_4000_FreeRenderIm(void)
  164. {
  165.     FreeClass(renderim) ;
  166. }
  167. }
  168.  
  169. ULONG SAVEDS STDARGS DispatchRenderImage(Class *cl, Object *o, Msg msg)
  170. {
  171. RenderImageData *ird;
  172. impDraw *imd;
  173. APTR    retval = NULL;
  174. unsigned long i ;
  175.  
  176.     GETA4 ;
  177.     switch (msg->MethodID) {
  178.     case OM_NEW:
  179.         if (retval = (APTR)DoSuperMethodA(cl, o, msg)) {
  180.             ird = (RenderImageData *)INST_DATA(cl, retval);
  181.  
  182.             ird->ri_DefaultImage.LeftEdge = (short)GetTagData(IA_Left, 0,
  183.                 ((opSet *)msg)->ops_AttrList);
  184.             ird->ri_DefaultImage.TopEdge = (short)GetTagData(IA_Top, 0,
  185.                 ((opSet *)msg)->ops_AttrList);
  186.             ird->ri_DefaultImage.Width = (short)GetTagData(IA_Width, 0,
  187.                 ((opSet *)msg)->ops_AttrList);
  188.             ird->ri_DefaultImage.Height = (short)GetTagData(IA_Height, 0,
  189.                 ((opSet *)msg)->ops_AttrList);
  190.  
  191.             ird->ri_DefaultImage.Depth = 1 ;
  192.             ird->ri_DefaultImage.ImageData = NULL ;
  193.             ird->ri_DefaultImage.PlanePick = 7 ;
  194.             ird->ri_DefaultImage.PlaneOnOff = 0 ;
  195.             ird->ri_DefaultImage.NextImage = NULL ;
  196.  
  197.             for (i=IRD_Normal; i<= IRD_SelectedDisabled; i++)
  198.                 ird->ri_TStyle[i-IRD_Normal] = (Image *)GetTagData(i,
  199.                     (ULONG)&ird->ri_DefaultImage,
  200.                     ((opSet *)msg)->ops_AttrList);
  201.         }
  202.         break;
  203.     case IM_DRAW:
  204.         ird = (RenderImageData *)INST_DATA(cl, o);
  205.         imd = (impDraw *)msg;
  206.         if (imd->imp_State >= IDS_NORMAL &&
  207.             imd->imp_State <= IDS_SELECTEDDISABLED) {
  208.             DrawImage(imd->imp_RPort,
  209.                     ird->ri_TStyle[imd->imp_State],
  210.                     imd->imp_Offset.X, imd->imp_Offset.Y);
  211.         }
  212.         else
  213.             retval = (APTR)DoSuperMethodA(cl, o, msg);
  214.         break;
  215.     case IM_HITTEST:
  216.         retval = (APTR)DoSuperMethodA(cl, o, msg);
  217.         break;
  218.     case IM_ERASE:
  219.         retval = (APTR)DoSuperMethodA(cl, o, msg);
  220.         break;
  221.     default:
  222.          retval = (APTR)DoSuperMethodA(cl, o, msg);
  223.     }
  224.     return (ULONG)retval;
  225. }
  226.  
  227.  
  228. #if defined( __GNUG__ )
  229. ADD2INIT(_STI_4000_InitRenderIm, -45);
  230. ADD2EXIT(_STD_4000_FreeRenderIm, -45);
  231. #endif
  232. @
  233.  
  234.  
  235. 1.3
  236. log
  237. @*** empty log message ***
  238. @
  239. text
  240. @d1 1
  241. a1 1
  242. // $Id$
  243. d80 7
  244. @
  245.  
  246.  
  247. 1.2
  248. log
  249. @imgbut est pris en charge par FButton
  250. @
  251. text
  252. @d1 1
  253. d14 2
  254. d17 1
  255. d21 5
  256. a25 16
  257. #include <cxxproto/intuition.h>
  258.  
  259.  
  260. extern "C" {
  261. extern struct Library *UtilityBase ;
  262. struct TagItem *FindTagItem( Tag tagVal, struct TagItem *tagList );
  263. ULONG GetTagData( Tag tagValue, unsigned long defaultVal,
  264.         struct TagItem *tagList );
  265. #include <pragmas/utility_pragmas.h>
  266.  
  267. ULONG DoMethod( Object *obj, unsigned long MethodID, ... );
  268. ULONG DoSuperMethodA( struct IClass *cl, Object *obj, Msg message );
  269. ULONG DoSuperMethod( struct IClass *cl, Object *obj, unsigned long MethodID,
  270.         ... );
  271. void kprintf(STRPTR format, ...) ;
  272. }
  273. d33 2
  274. d37 2
  275. d61 1
  276. a63 1
  277.     FreeFButton() ;
  278. d69 1
  279. d90 3
  280. a92 2
  281. static ULONG __asm DispatchRenderImage(register __a0 Class *cl,
  282.     register __a2 Object *o, register __a1 Msg msg);
  283. d94 1
  284. d98 2
  285. a99 1
  286.     if (!(renderim = MakeClass(NULL, "imageclass", NULL,
  287. d101 1
  288. a101 1
  289.         retval =  1 ;
  290. d104 3
  291. a106 1
  292.         renderim->cl_Dispatcher.h_Entry = (HOOKFUNC)DispatchRenderImage;
  293. d108 3
  294. d112 1
  295. d119 1
  296. d121 1
  297. a121 3
  298. ULONG __saveds __asm DispatchRenderImage(register __a0 Class *cl,
  299.                                 register __a2 Object *o,
  300.                                 register __a1 Msg msg)
  301. d128 1
  302. d179 5
  303. @
  304.  
  305.  
  306. 1.1
  307. log
  308. @Initial revision
  309. @
  310. text
  311. @d34 5
  312. d52 3
  313. a54 1
  314.     gad = gl->gad = (Gadget *)NewObject(NULL, "frbuttonclass",
  315. d65 2
  316. @
  317.